// 引入请求http模块
const request = require('request');
const {fsWrite , fsDir} = require('./lcfs.js');
const cheerio = require('cheerio');

// 保存爬取网页地址
let httpUrl = `https://www.1905.com/vod/list/n_1/o3p1.html?fr=vodhome_js_lx`; // 分类首页

// 封装一个请求函数
function req(url) {
    return new Promise((resolve , reject)=>{
        request.get(url , (err , response , body)=>{ // 由于我们爬取的是网页数据所以只用到body
            if (err) {
                reject(err);
            }else{
                resolve({response , body});
            }
        })
    });
}

// 获取按照类型分类页的地址
async function getClassUrl() {
    // 调用请求函数获取网页所有标签
    let {response , body} = await req(httpUrl);

    // 正则 使用正则匹配我们需要拿到的内容
    let reg = /<span class="search-index-L">类型 :<\/span>(.*?)<\/div>/igs
    // 正则 具体类型标签地址
    let reg1 = /<a href="javascript:void\(0\);" onclick="location.href='(.*?)';return false;" .*?>(.*?)<\/a>/gis;

    // 使用正则表达式匹配body ， 拿到类型容器
    let result = reg.exec(body)[1];

    // 如果没有拿到类型容器就，抛出错误
    if (!result) {
        throw new Error('未找到类型容器');
    }

    let matches;
    let arrClass = [];
    while (matches = reg1.exec(result)) {
        if (matches[2] != '全部') {
            let obj = {
                className: matches[2], // 第二个捕获组是类名
                url: matches[1] // 第一个捕获组是URL
            };
    
            // 将拿到的对象添加进数组里,分类页的url
            arrClass.push(obj);

            await fsDir('./moves/' + matches[2]);
    
            // 具体类型电影的url
            getMovies(matches[1] , matches[2]);
        }
    }
    // console.log(arrClass);
}

// 再定义一个具体类型电影页函数
let getMovies = async (url , moviesType) => {
    // 当前分类电影的源码，比如拿到爱情类型电影页面的源码
    let {body} = await req(url);
    // 匹配电影
    let reg = /<a class="pic-pack-outer" target="_blank" href="(.*?)" title="(.*?)">/igs
    
    let res;
    let arrList =[];
    while (res = reg.exec(body)) {
        // 可以改进，用迭代器
        arrList.push(res[1]) // 拿到电影url

        parsePage(res[1] , moviesType);
    }
    // console.log("分类：" , moviesType);
    // console.log(arrList);
}

// 定义一个解析页面函数
const parsePage = async (url , moviesType)=>{
    // 拿到当前页面url的源代码
    let {body} = await req(url);

    // 设置匹配正则 注意：这里正则有问题！！！
    let reg = /<h1 class="playerBox-info-name playerBox-info-cnName">(.*?)<\/h1>.*?id="playerBoxIntroCon">(.*?)<a.*? 导演.*?target="_blank" title="(.*?)" data-hrefexp/igs

    let res = reg.exec(body);

    let movie = {
        name:res[1],
        brief:res[2],
        daoyan:res[3],
        movieUrl:url,
        moviesType
    }
    // 把数据转换为json对象
    let strMovie = JSON.stringify(movie);
    
    // 把当前页面拿到的数据写入本地文件
    fsWrite('./moves/' + moviesType + '/ ' + res[1] + '.json' , strMovie);

}

getClassUrl();






